//#ifndef PHOTONMAPPING_H
//#define PHOTONMAPPING_H
//#include "Vectors.h"
//#include "Ray.h"
//#include "light.h"
//#include <math.h>
//
//// how much memory to allocate per call
//#define PHOTON_REALLOC_JUMP            1000
//
//// 1.0000000000 is used for the local coordinate system
//#define TINY (1.0e-10)
//
//// the photon structure
//typedef struct
//{
//	Vec3f power;
//	Vec3f direction;
//	Vec3f position;
//} Photon;
//
//// the photon list structure used in finding the closest photons at x
//typedef struct
//{
//	Photon photon;
//	float distance;
//} PhotonList;
//
//// the photon map class
//class PhotonMap
//{
//public:
//	long		m_NumGlobalPhotons; // number of photons in photon map
//	Photon *	m_GlobalPhoton; // the photon map as an array
//
//	long        m_MaxPhotonPerObject; // max photons per object to shoot
//	long        m_MaxPhotonNeighbors; // max closest neighbors at hit point 
//	long		m_nAbsorbed;  // number of absorbed photons
//	long		m_nRefracted; // number of refracted/transmitted photons
//	long		m_nSpecularReflected; // number of mirror reflected photons
//	long		m_nDiffuseReflected;  // number of diffused reflected photons
//public:
//	//constructor used to allocate and set up NULL pointers
//	PhotonMap();
//
//	// set method for the max photons per object
//	// and max neighbors to return at x
//	void SetupPhotonMapping(long max_photons, int max_friends);
//
//	// add a photon to the photon map (array)
//	void AddToPhotonList(Photon **, long *, Photon);
//
//	// calculate the X and Y axes vectors of local coordinate system
//	void MakeXY( Vec3f *vX, Vec3f *vY, Vec3f V );
//
//	// gather nearest photons at X and save them to passed array as param1
//	long GetNearestPhotons(PhotonList [], long, Vec3f);
//};
//
//#endif